///////////////////////////////////////////////////////////////////////////////////
/// OpenGL Overload (www.g-truc.net)
///
/// Copyright (c) 2013 - 2013 G-Truc Creation (www.g-truc.net)
/// Permission is hereby granted, free of charge, to any person obtaining a copy
/// of this software and associated documentation files (the "Software"), to deal
/// in the Software without restriction, including without limitation the rights
/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
/// copies of the Software, and to permit persons to whom the Software is
/// furnished to do so, subject to the following conditions:
/// 
/// The above copyright notice and this permission notice shall be included in
/// all copies or substantial portions of the Software.
/// 
/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
/// THE SOFTWARE.
///
/// @ref core
/// @file glo/glo.hpp
/// @date 2013-02-10 / 2013-02-10
/// @author Christophe Riccio
///////////////////////////////////////////////////////////////////////////////////
#include "glo.hpp"

#ifdef WIN32
#	define gloGetProcAddress wglGetProcAddress

	// OpenGL 1.0
	// PFNGLENABLEPROC glEnable(0);
	// PFNGLVIEWPORTPROC glViewport(0);

	// OpenGL 1.1
	// PFNGLGETINTEGERVPROC glGetIntegerv(0);
	// PFNGLGETERRORPROC glGetError(0);

	// OpenGL 1.2 
	PFNGLBLENDCOLORPROC glBlendColor(0);
	PFNGLBLENDEQUATIONPROC glBlendEquation(0);
	PFNGLDRAWRANGEELEMENTSPROC glDrawRangeElements(0);
	PFNGLTEXIMAGE3DPROC glTexImage3D(0);
	PFNGLTEXSUBIMAGE3DPROC glTexSubImage3D(0);
	PFNGLCOPYTEXSUBIMAGE3DPROC glCopyTexSubImage3D(0);

	// OpenGL 1.3
	PFNGLACTIVETEXTUREPROC glActiveTexture(0);
	PFNGLSAMPLECOVERAGEPROC glSampleCoverage(0);
	PFNGLCOMPRESSEDTEXIMAGE3DPROC glCompressedTexImage3D(0);
	PFNGLCOMPRESSEDTEXIMAGE2DPROC glCompressedTexImage2D(0);
	PFNGLCOMPRESSEDTEXIMAGE1DPROC glCompressedTexImage1D(0);
	PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glCompressedTexSubImage3D(0);
	PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glCompressedTexSubImage2D(0);
	PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glCompressedTexSubImage1D(0);
	PFNGLGETCOMPRESSEDTEXIMAGEPROC glGetCompressedTexImage(0);

	// OpenGL 1.4
	
	PFNGLBLENDFUNCSEPARATEPROC glBlendFuncSeparate(0);
	PFNGLPOINTPARAMETERFPROC glPointParameterf(0);
	PFNGLPOINTPARAMETERFVPROC glPointParameterfv(0);
	PFNGLPOINTPARAMETERIPROC glPointParameteri(0);
	PFNGLPOINTPARAMETERIVPROC glPointParameteriv(0);

	// OpenGL 1.5
	PFNGLGENQUERIESPROC glGenQueries(0);
	PFNGLDELETEQUERIESPROC glDeleteQueries(0);
	PFNGLISQUERYPROC glIsQuery(0);
	PFNGLBEGINQUERYPROC glBeginQuery(0);
	PFNGLENDQUERYPROC glEndQuery(0);
	PFNGLGETQUERYIVPROC glGetQueryiv(0);
	PFNGLGETQUERYOBJECTIVPROC glGetQueryObjectiv(0);
	PFNGLGETQUERYOBJECTUIVPROC glGetQueryObjectuiv(0);
	PFNGLBINDBUFFERPROC glBindBuffer(0);
	PFNGLDELETEBUFFERSPROC glDeleteBuffers(0);
	PFNGLGENBUFFERSPROC glGenBuffers(0);
	PFNGLISBUFFERPROC glIsBuffer(0);
	PFNGLBUFFERDATAPROC glBufferData(0);
	PFNGLBUFFERSUBDATAPROC glBufferSubData(0);
	PFNGLGETBUFFERSUBDATAPROC glGetBufferSubData(0);
	PFNGLUNMAPBUFFERPROC glUnmapBuffer(0);
	PFNGLGETBUFFERPARAMETERIVPROC glGetBufferParameteriv(0);
	PFNGLGETBUFFERPOINTERVPROC glGetBufferPointerv(0);

	// OpenGL 2.0
	PFNGLBLENDEQUATIONSEPARATEPROC glBlendEquationSeparate(0);
	PFNGLDRAWBUFFERSPROC glDrawBuffers(0);
	PFNGLSTENCILOPSEPARATEPROC glStencilOpSeparate(0);
	PFNGLSTENCILFUNCSEPARATEPROC glStencilFuncSeparate(0);
	PFNGLSTENCILMASKSEPARATEPROC glStencilMaskSeparate(0);

	// Program and shader
	PFNGLCREATESHADERPROC glCreateShader(0);
	PFNGLDELETESHADERPROC glDeleteShader(0);
	PFNGLCREATEPROGRAMPROC glCreateProgram(0);
	PFNGLDELETEPROGRAMPROC glDeleteProgram(0);
	PFNGLSHADERSOURCEPROC glShaderSource(0);
	PFNGLCOMPILESHADERPROC glCompileShader(0);
	PFNGLGETSHADERIVPROC glGetShaderiv(0);
	PFNGLVALIDATEPROGRAMPROC glValidateProgram(0);
	PFNGLGETPROGRAMIVPROC glGetProgramiv(0);
	PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog(0);
	PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog(0);
	PFNGLATTACHSHADERPROC glAttachShader(0);
	PFNGLLINKPROGRAMPROC glLinkProgram(0);
	PFNGLUSEPROGRAMPROC glUseProgram(0);
	PFNGLGETVERTEXATTRIBDVPROC glGetVertexAttribdv(0);
	PFNGLGETVERTEXATTRIBFVPROC glGetVertexAttribfv(0);
	PFNGLGETVERTEXATTRIBIVPROC glGetVertexAttribiv(0);
	PFNGLGETVERTEXATTRIBPOINTERVPROC glGetVertexAttribPointerv(0);
	PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer(0);
	PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray(0);
	PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray(0);
	PFNGLBINDATTRIBLOCATIONPROC glBindAttribLocation(0);
	PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation(0);
	PFNGLGETATTRIBLOCATIONPROC glGetAttribLocation(0);
	PFNGLUNIFORM1FPROC glUniform1f(0);
	PFNGLUNIFORM2FPROC glUniform2f(0);
	PFNGLUNIFORM3FPROC glUniform3f(0);
	PFNGLUNIFORM4FPROC glUniform4f(0);
	PFNGLUNIFORM1IPROC glUniform1i(0);
	PFNGLUNIFORM2IPROC glUniform2i(0);
	PFNGLUNIFORM3IPROC glUniform3i(0);
	PFNGLUNIFORM4IPROC glUniform4i(0);
	PFNGLUNIFORM1FVPROC glUniform1fv(0);
	PFNGLUNIFORM2FVPROC glUniform2fv(0);
	PFNGLUNIFORM3FVPROC glUniform3fv(0);
	PFNGLUNIFORM4FVPROC glUniform4fv(0);
	PFNGLUNIFORM1IVPROC glUniform1iv(0);
	PFNGLUNIFORM2IVPROC glUniform2iv(0);
	PFNGLUNIFORM3IVPROC glUniform3iv(0);
	PFNGLUNIFORM4IVPROC glUniform4iv(0);
	PFNGLUNIFORMMATRIX2FVPROC glUniformMatrix2fv(0);
	PFNGLUNIFORMMATRIX3FVPROC glUniformMatrix3fv(0);
	PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv(0);
	PFNGLGETACTIVEATTRIBPROC glGetActiveAttrib(0);
	PFNGLGETACTIVEUNIFORMPROC glGetActiveUniform(0);

	PFNGLVERTEXATTRIB1DPROC glVertexAttrib1d(0);
	PFNGLVERTEXATTRIB1DVPROC glVertexAttrib1dv(0);
	PFNGLVERTEXATTRIB1FPROC glVertexAttrib1f(0);
	PFNGLVERTEXATTRIB1FVPROC glVertexAttrib1fv(0);
	PFNGLVERTEXATTRIB1SPROC glVertexAttrib1s(0);
	PFNGLVERTEXATTRIB1SVPROC glVertexAttrib1sv(0);
	PFNGLVERTEXATTRIB2DPROC glVertexAttrib2d(0);
	PFNGLVERTEXATTRIB2DVPROC glVertexAttrib2dv(0);
	PFNGLVERTEXATTRIB2FPROC glVertexAttrib2f(0);
	PFNGLVERTEXATTRIB2FVPROC glVertexAttrib2fv(0);
	PFNGLVERTEXATTRIB2SPROC glVertexAttrib2s(0);
	PFNGLVERTEXATTRIB2SVPROC glVertexAttrib2sv(0);
	PFNGLVERTEXATTRIB3DPROC glVertexAttrib3d(0);
	PFNGLVERTEXATTRIB3DVPROC glVertexAttrib3dv(0);
	PFNGLVERTEXATTRIB3FPROC glVertexAttrib3f(0);
	PFNGLVERTEXATTRIB3FVPROC glVertexAttrib3fv(0);
	PFNGLVERTEXATTRIB3SPROC glVertexAttrib3s(0);
	PFNGLVERTEXATTRIB3SVPROC glVertexAttrib3sv(0);
	PFNGLVERTEXATTRIB4DPROC glVertexAttrib4d(0);
	PFNGLVERTEXATTRIB4DVPROC glVertexAttrib4dv(0);
	PFNGLVERTEXATTRIB4FPROC glVertexAttrib4f(0);
	PFNGLVERTEXATTRIB4FVPROC glVertexAttrib4fv(0);
	PFNGLVERTEXATTRIB4SPROC glVertexAttrib4s(0);
	PFNGLVERTEXATTRIB4SVPROC glVertexAttrib4sv(0);
	PFNGLVERTEXATTRIB4NBVPROC glVertexAttrib4Nbv(0);
	PFNGLVERTEXATTRIB4NIVPROC glVertexAttrib4Niv(0);
	PFNGLVERTEXATTRIB4NSVPROC glVertexAttrib4Nsv(0);
	PFNGLVERTEXATTRIB4NUBPROC glVertexAttrib4Nub(0);
	PFNGLVERTEXATTRIB4NUBVPROC glVertexAttrib4Nubv(0);
	PFNGLVERTEXATTRIB4NUIVPROC glVertexAttrib4Nuiv(0);
	PFNGLVERTEXATTRIB4NUSVPROC glVertexAttrib4Nusv(0);
	PFNGLVERTEXATTRIB4BVPROC glVertexAttrib4bv(0);
	PFNGLVERTEXATTRIB4IVPROC glVertexAttrib4iv(0);
	PFNGLVERTEXATTRIB4UBVPROC glVertexAttrib4ubv(0);
	PFNGLVERTEXATTRIB4UIVPROC glVertexAttrib4uiv(0);
	PFNGLVERTEXATTRIB4USVPROC glVertexAttrib4usv(0);

	// OpenGL 3.0
	PFNGLCOLORMASKIPROC glColorMaski(0);
	PFNGLGETBOOLEANI_VPROC glGetBooleani_v(0);
	PFNGLGETINTEGERI_VPROC glGetIntegeri_v(0);
	PFNGLENABLEIPROC glEnablei(0);
	PFNGLDISABLEIPROC glDisablei(0);
	PFNGLISENABLEDIPROC glIsEnabledi(0);
	PFNGLBEGINTRANSFORMFEEDBACKPROC glBeginTransformFeedback(0);
	PFNGLENDTRANSFORMFEEDBACKPROC glEndTransformFeedback(0);
	PFNGLBINDBUFFERRANGEPROC glBindBufferRange(0);
	PFNGLBINDBUFFERBASEPROC glBindBufferBase(0);
	PFNGLTRANSFORMFEEDBACKVARYINGSPROC glTransformFeedbackVaryings(0);
	PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glGetTransformFeedbackVarying(0);
	PFNGLCLAMPCOLORPROC glClampColor(0);
	PFNGLBEGINCONDITIONALRENDERPROC glBeginConditionalRender(0);
	PFNGLENDCONDITIONALRENDERPROC glEndConditionalRender(0);
	PFNGLVERTEXATTRIBIPOINTERPROC glVertexAttribIPointer(0);
	PFNGLGETVERTEXATTRIBIIVPROC glGetVertexAttribIiv(0);
	PFNGLGETVERTEXATTRIBIUIVPROC glGetVertexAttribIuiv(0);
	PFNGLVERTEXATTRIBI1IPROC glVertexAttribI1i(0);
	PFNGLVERTEXATTRIBI2IPROC glVertexAttribI2i(0);
	PFNGLVERTEXATTRIBI3IPROC glVertexAttribI3i(0);
	PFNGLVERTEXATTRIBI4IPROC glVertexAttribI4i(0);
	PFNGLVERTEXATTRIBI1UIPROC glVertexAttribI1ui(0);
	PFNGLVERTEXATTRIBI2UIPROC glVertexAttribI2ui(0);
	PFNGLVERTEXATTRIBI3UIPROC glVertexAttribI3ui(0);
	PFNGLVERTEXATTRIBI4UIPROC glVertexAttribI4ui(0);
	PFNGLVERTEXATTRIBI1IVPROC glVertexAttribI1iv(0);
	PFNGLVERTEXATTRIBI2IVPROC glVertexAttribI2iv(0);
	PFNGLVERTEXATTRIBI3IVPROC glVertexAttribI3iv(0);
	PFNGLVERTEXATTRIBI4IVPROC glVertexAttribI4iv(0);
	PFNGLVERTEXATTRIBI1UIVPROC glVertexAttribI1uiv(0);
	PFNGLVERTEXATTRIBI2UIVPROC glVertexAttribI2uiv(0);
	PFNGLVERTEXATTRIBI3UIVPROC glVertexAttribI3uiv(0);
	PFNGLVERTEXATTRIBI4UIVPROC glVertexAttribI4uiv(0);
	PFNGLVERTEXATTRIBI4BVPROC glVertexAttribI4bv(0);
	PFNGLVERTEXATTRIBI4SVPROC glVertexAttribI4sv(0);
	PFNGLVERTEXATTRIBI4UBVPROC glVertexAttribI4ubv(0);
	PFNGLVERTEXATTRIBI4USVPROC glVertexAttribI4usv(0);
	PFNGLGETUNIFORMUIVPROC glGetUniformuiv(0);
	PFNGLBINDFRAGDATALOCATIONPROC glBindFragDataLocation(0);
	PFNGLGETFRAGDATALOCATIONPROC glGetFragDataLocation(0);
	PFNGLUNIFORM1UIPROC glUniform1ui(0);
	PFNGLUNIFORM2UIPROC glUniform2ui(0);
	PFNGLUNIFORM3UIPROC glUniform3ui(0);
	PFNGLUNIFORM4UIPROC glUniform4ui(0);
	PFNGLUNIFORM1UIVPROC glUniform1uiv(0);
	PFNGLUNIFORM2UIVPROC glUniform2uiv(0);
	PFNGLUNIFORM3UIVPROC glUniform3uiv(0);
	PFNGLUNIFORM4UIVPROC glUniform4uiv(0);
	PFNGLTEXPARAMETERIIVPROC glTexParameterIiv(0);
	PFNGLTEXPARAMETERIUIVPROC glTexParameterIuiv(0);
	PFNGLGETTEXPARAMETERIIVPROC glGetTexParameterIiv(0);
	PFNGLGETTEXPARAMETERIUIVPROC glGetTexParameterIuiv(0);
	PFNGLCLEARBUFFERIVPROC glClearBufferiv(0);
	PFNGLCLEARBUFFERUIVPROC glClearBufferuiv(0);
	PFNGLCLEARBUFFERFVPROC glClearBufferfv(0);
	PFNGLCLEARBUFFERFIPROC glClearBufferfi(0);
	PFNGLGETSTRINGIPROC glGetStringi(0);

	// GL_ARB_framebuffer_object
	PFNGLISRENDERBUFFERPROC glIsRenderbuffer(0);
	PFNGLBINDRENDERBUFFERPROC glBindRenderbuffer(0);
	PFNGLDELETERENDERBUFFERSPROC glDeleteRenderbuffers(0);
	PFNGLGENRENDERBUFFERSPROC glGenRenderbuffers(0);
	PFNGLRENDERBUFFERSTORAGEPROC glRenderbufferStorage(0);
	PFNGLGETRENDERBUFFERPARAMETERIVPROC glGetRenderbufferParameteriv(0);
	PFNGLISFRAMEBUFFERPROC glIsFramebuffer(0);
	PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer(0);
	PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers(0);
	PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers(0);
	PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus(0);
	PFNGLFRAMEBUFFERTEXTURE1DPROC glFramebufferTexture1D(0);
	PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D(0);
	PFNGLFRAMEBUFFERTEXTURE3DPROC glFramebufferTexture3D(0);
	PFNGLFRAMEBUFFERRENDERBUFFERPROC glFramebufferRenderbuffer(0);
	PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glGetFramebufferAttachmentParameteriv(0);
	PFNGLGENERATEMIPMAPPROC glGenerateMipmap(0);
	PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer(0);
	PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glRenderbufferStorageMultisample(0);
	PFNGLFRAMEBUFFERTEXTURELAYERPROC glFramebufferTextureLayer(0);

	// GL_ARB_vertex_array_object
	PFNGLBINDVERTEXARRAYPROC glBindVertexArray(0);
	PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays(0);
	PFNGLGENVERTEXARRAYSPROC glGenVertexArrays(0);
	PFNGLISVERTEXARRAYPROC glIsVertexArray(0);

	// GL_ARB_provoking_vertex
	PFNGLPROVOKINGVERTEXPROC glProvokingVertex(0);

	// OpenGL 3.1
	PFNGLDRAWARRAYSINSTANCEDPROC glDrawArraysInstanced(0);
	PFNGLDRAWELEMENTSINSTANCEDPROC glDrawElementsInstanced(0);
	PFNGLTEXBUFFERPROC glTexBuffer(0);
	PFNGLPRIMITIVERESTARTINDEXPROC glPrimitiveRestartIndex(0);

	// GL_ARB_copy_buffer
	PFNGLCOPYBUFFERSUBDATAPROC glCopyBufferSubData(0);

	// OpenGL 3.2
	PFNGLGETINTEGER64I_VPROC glGetInteger64i_v(0);
	PFNGLGETBUFFERPARAMETERI64VPROC glGetBufferParameteri64v(0);
	PFNGLFRAMEBUFFERTEXTUREPROC glFramebufferTexture(0);

	// GL_ARB_map_buffer_range
	PFNGLMAPBUFFERRANGEPROC glMapBufferRange(0);
	PFNGLFLUSHMAPPEDBUFFERRANGEPROC glFlushMappedBufferRange(0);

	// GL_ARB_draw_elements_base_vertex
	PFNGLDRAWELEMENTSBASEVERTEXPROC glDrawElementsBaseVertex(0);
	PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glDrawRangeElementsBaseVertex(0);
	PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glDrawElementsInstancedBaseVertex(0);
	PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glMultiDrawElementsBaseVertex(0);

	// GL_ARB_uniform_buffer_object
	PFNGLGETUNIFORMINDICESPROC glGetUniformIndices(0);
	PFNGLGETACTIVEUNIFORMSIVPROC glGetActiveUniformsiv(0);
	PFNGLGETACTIVEUNIFORMNAMEPROC glGetActiveUniformName(0);
	PFNGLGETUNIFORMBLOCKINDEXPROC glGetUniformBlockIndex(0);
	PFNGLGETACTIVEUNIFORMBLOCKIVPROC glGetActiveUniformBlockiv(0);
	PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glGetActiveUniformBlockName(0);
	PFNGLUNIFORMBLOCKBINDINGPROC glUniformBlockBinding(0);

	// GL_ARB_texture_multisample
	PFNGLTEXIMAGE2DMULTISAMPLEPROC glTexImage2DMultisample(0);
	PFNGLTEXIMAGE3DMULTISAMPLEPROC glTexImage3DMultisample(0);
	PFNGLGETMULTISAMPLEFVPROC glGetMultisamplefv(0);
	PFNGLSAMPLEMASKIPROC glSampleMaski(0);

	// GL_ARB_sync
	PFNGLFENCESYNCPROC glFenceSync(0);
	PFNGLISSYNCPROC glIsSync(0);
	PFNGLDELETESYNCPROC glDeleteSync(0);
	PFNGLCLIENTWAITSYNCPROC glClientWaitSync(0);
	PFNGLWAITSYNCPROC glWaitSync(0);
	PFNGLGETINTEGER64VPROC glGetInteger64v(0);
	PFNGLGETSYNCIVPROC glGetSynciv(0);

	// OpenGL 3.3
	PFNGLVERTEXATTRIBDIVISORPROC glVertexAttribDivisor(0);

	// GL_ARB_sampler_objects
	PFNGLGENSAMPLERSPROC glGenSamplers(0);
	PFNGLDELETESAMPLERSPROC glDeleteSamplers(0);
	PFNGLISSAMPLERPROC glIsSampler(0);
	PFNGLBINDSAMPLERPROC glBindSampler(0);
	PFNGLSAMPLERPARAMETERIPROC glSamplerParameteri(0);
	PFNGLSAMPLERPARAMETERIVPROC glSamplerParameteriv(0);
	PFNGLSAMPLERPARAMETERFPROC glSamplerParameterf(0);
	PFNGLSAMPLERPARAMETERFVPROC glSamplerParameterfv(0);
	PFNGLSAMPLERPARAMETERIIVPROC glSamplerParameterIiv(0);
	PFNGLSAMPLERPARAMETERIUIVPROC glSamplerParameterIuiv(0);
	PFNGLGETSAMPLERPARAMETERIVPROC glGetSamplerParameteriv(0);
	PFNGLGETSAMPLERPARAMETERIIVPROC glGetSamplerParameterIiv(0);
	PFNGLGETSAMPLERPARAMETERFVPROC glGetSamplerParameterfv(0);
	PFNGLGETSAMPLERPARAMETERIUIVPROC glGetSamplerParameterIuiv(0);

	// OpenGL 4.0
	PFNGLMINSAMPLESHADINGPROC glMinSampleShading(0);
	PFNGLBLENDEQUATIONIPROC glBlendEquationi(0);
	PFNGLBLENDEQUATIONSEPARATEIPROC glBlendEquationSeparatei(0);
	PFNGLBLENDFUNCIPROC glBlendFunci(0);
	PFNGLBLENDFUNCSEPARATEIPROC glBlendFuncSeparatei(0);

	// GL_ARB_draw_indirect
	PFNGLDRAWARRAYSINDIRECTPROC glDrawArraysIndirect(0);
	PFNGLDRAWELEMENTSINDIRECTPROC glDrawElementsIndirect(0);

	// GL_ARB_gpu_shader_fp64
	PFNGLUNIFORM1DPROC glUniform1d(0);
	PFNGLUNIFORM2DPROC glUniform2d(0);
	PFNGLUNIFORM3DPROC glUniform3d(0);
	PFNGLUNIFORM4DPROC glUniform4d(0);
	PFNGLUNIFORM1DVPROC glUniform1dv(0);
	PFNGLUNIFORM2DVPROC glUniform2dv(0);
	PFNGLUNIFORM3DVPROC glUniform3dv(0);
	PFNGLUNIFORM4DVPROC glUniform4dv(0);
	PFNGLUNIFORMMATRIX2DVPROC glUniformMatrix2dv(0);
	PFNGLUNIFORMMATRIX3DVPROC glUniformMatrix3dv(0);
	PFNGLUNIFORMMATRIX4DVPROC glUniformMatrix4dv(0);
	PFNGLUNIFORMMATRIX2X3DVPROC glUniformMatrix2x3dv(0);
	PFNGLUNIFORMMATRIX2X4DVPROC glUniformMatrix2x4dv(0);
	PFNGLUNIFORMMATRIX3X2DVPROC glUniformMatrix3x2dv(0);
	PFNGLUNIFORMMATRIX3X4DVPROC glUniformMatrix3x4dv(0);
	PFNGLUNIFORMMATRIX4X2DVPROC glUniformMatrix4x2dv(0);
	PFNGLUNIFORMMATRIX4X3DVPROC glUniformMatrix4x3dv(0);
	PFNGLGETUNIFORMDVPROC glGetUniformdv(0);

	// GL_ARB_shader_subroutine
	PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC glGetSubroutineUniformLocation(0);
	PFNGLGETSUBROUTINEINDEXPROC glGetSubroutineIndex(0);
	PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC glGetActiveSubroutineUniformiv(0);
	PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC glGetActiveSubroutineUniformName(0);
	PFNGLGETACTIVESUBROUTINENAMEPROC glGetActiveSubroutineName(0);
	PFNGLUNIFORMSUBROUTINESUIVPROC glUniformSubroutinesuiv(0);
	PFNGLGETUNIFORMSUBROUTINEUIVPROC glGetUniformSubroutineuiv(0);
	PFNGLGETPROGRAMSTAGEIVPROC glGetProgramStageiv(0);

	// GL_ARB_tessellation_shader
	PFNGLPATCHPARAMETERIPROC glPatchParameteri(0);
	PFNGLPATCHPARAMETERFVPROC glPatchParameterfv(0);

	// GL_ARB_transform_feedback2
	PFNGLBINDTRANSFORMFEEDBACKPROC glBindTransformFeedback(0);
	PFNGLDELETETRANSFORMFEEDBACKSPROC glDeleteTransformFeedbacks(0);
	PFNGLGENTRANSFORMFEEDBACKSPROC glGenTransformFeedbacks(0);
	PFNGLISTRANSFORMFEEDBACKPROC glIsTransformFeedback(0);
	PFNGLPAUSETRANSFORMFEEDBACKPROC glPauseTransformFeedback(0);
	PFNGLRESUMETRANSFORMFEEDBACKPROC glResumeTransformFeedback(0);
	PFNGLDRAWTRANSFORMFEEDBACKPROC glDrawTransformFeedback(0);

	// GL_ARB_transform_feedback3
	PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC glDrawTransformFeedbackStream(0);
	PFNGLBEGINQUERYINDEXEDPROC glBeginQueryIndexed(0);
	PFNGLENDQUERYINDEXEDPROC glEndQueryIndexed(0);
	PFNGLGETQUERYINDEXEDIVPROC glGetQueryIndexediv(0);

	// GL_ARB_get_program_binary
	PFNGLGETPROGRAMBINARYPROC glGetProgramBinary(0);
	PFNGLPROGRAMBINARYPROC glProgramBinary(0);
	PFNGLPROGRAMPARAMETERIPROC glProgramParameteri(0);

	// GL_ARB_separate_shader_objects
	PFNGLUSEPROGRAMSTAGESPROC glUseProgramStages(0);
	PFNGLACTIVESHADERPROGRAMPROC glActiveShaderProgram(0);
	PFNGLCREATESHADERPROGRAMVPROC glCreateShaderProgramv(0);
	PFNGLBINDPROGRAMPIPELINEPROC glBindProgramPipeline(0);
	PFNGLDELETEPROGRAMPIPELINESPROC glDeleteProgramPipelines(0);
	PFNGLGENPROGRAMPIPELINESPROC glGenProgramPipelines(0);
	PFNGLISPROGRAMPIPELINEPROC glIsProgramPipeline(0);
	PFNGLGETPROGRAMPIPELINEIVPROC glGetProgramPipelineiv(0);
	PFNGLPROGRAMUNIFORM1IPROC glProgramUniform1i(0);
	PFNGLPROGRAMUNIFORM1IVPROC glProgramUniform1iv(0);
	PFNGLPROGRAMUNIFORM1FPROC glProgramUniform1f(0);
	PFNGLPROGRAMUNIFORM1FVPROC glProgramUniform1fv(0);
	PFNGLPROGRAMUNIFORM1DPROC glProgramUniform1d(0);
	PFNGLPROGRAMUNIFORM1DVPROC glProgramUniform1dv(0);
	PFNGLPROGRAMUNIFORM1UIPROC glProgramUniform1ui(0);
	PFNGLPROGRAMUNIFORM1UIVPROC glProgramUniform1uiv(0);
	PFNGLPROGRAMUNIFORM2IPROC glProgramUniform2i(0);
	PFNGLPROGRAMUNIFORM2IVPROC glProgramUniform2iv(0);
	PFNGLPROGRAMUNIFORM2FPROC glProgramUniform2f(0);
	PFNGLPROGRAMUNIFORM2FVPROC glProgramUniform2fv(0);
	PFNGLPROGRAMUNIFORM2DPROC glProgramUniform2d(0);
	PFNGLPROGRAMUNIFORM2DVPROC glProgramUniform2dv(0);
	PFNGLPROGRAMUNIFORM2UIPROC glProgramUniform2ui(0);
	PFNGLPROGRAMUNIFORM2UIVPROC glProgramUniform2uiv(0);
	PFNGLPROGRAMUNIFORM3IPROC glProgramUniform3i(0);
	PFNGLPROGRAMUNIFORM3IVPROC glProgramUniform3iv(0);
	PFNGLPROGRAMUNIFORM3FPROC glProgramUniform3f(0);
	PFNGLPROGRAMUNIFORM3FVPROC glProgramUniform3fv(0);
	PFNGLPROGRAMUNIFORM3DPROC glProgramUniform3d(0);
	PFNGLPROGRAMUNIFORM3DVPROC glProgramUniform3dv(0);
	PFNGLPROGRAMUNIFORM3UIPROC glProgramUniform3ui(0);
	PFNGLPROGRAMUNIFORM3UIVPROC glProgramUniform3uiv(0);
	PFNGLPROGRAMUNIFORM4IPROC glProgramUniform4i(0);
	PFNGLPROGRAMUNIFORM4IVPROC glProgramUniform4iv(0);
	PFNGLPROGRAMUNIFORM4FPROC glProgramUniform4f(0);
	PFNGLPROGRAMUNIFORM4FVPROC glProgramUniform4fv(0);
	PFNGLPROGRAMUNIFORM4DPROC glProgramUniform4d(0);
	PFNGLPROGRAMUNIFORM4DVPROC glProgramUniform4dv(0);
	PFNGLPROGRAMUNIFORM4UIPROC glProgramUniform4ui(0);
	PFNGLPROGRAMUNIFORM4UIVPROC glProgramUniform4uiv(0);
	PFNGLPROGRAMUNIFORMMATRIX2FVPROC glProgramUniformMatrix2fv(0);
	PFNGLPROGRAMUNIFORMMATRIX3FVPROC glProgramUniformMatrix3fv(0);
	PFNGLPROGRAMUNIFORMMATRIX4FVPROC glProgramUniformMatrix4fv(0);
	PFNGLPROGRAMUNIFORMMATRIX2DVPROC glProgramUniformMatrix2dv(0);
	PFNGLPROGRAMUNIFORMMATRIX3DVPROC glProgramUniformMatrix3dv(0);
	PFNGLPROGRAMUNIFORMMATRIX4DVPROC glProgramUniformMatrix4dv(0);
	PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC glProgramUniformMatrix2x3fv(0);
	PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC glProgramUniformMatrix3x2fv(0);
	PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC glProgramUniformMatrix2x4fv(0);
	PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC glProgramUniformMatrix4x2fv(0);
	PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC glProgramUniformMatrix3x4fv(0);
	PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC glProgramUniformMatrix4x3fv(0);
	PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC glProgramUniformMatrix2x3dv(0);
	PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC glProgramUniformMatrix3x2dv(0);
	PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC glProgramUniformMatrix2x4dv(0);
	PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC glProgramUniformMatrix4x2dv(0);
	PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC glProgramUniformMatrix3x4dv(0);
	PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC glProgramUniformMatrix4x3dv(0);
	PFNGLVALIDATEPROGRAMPIPELINEPROC glValidateProgramPipeline(0);
	PFNGLGETPROGRAMPIPELINEINFOLOGPROC glGetProgramPipelineInfoLog(0);

	// GL_ARB_vertex_attrib_64bit
	PFNGLVERTEXATTRIBL1DPROC glVertexAttribL1d(0);
	PFNGLVERTEXATTRIBL2DPROC glVertexAttribL2d(0);
	PFNGLVERTEXATTRIBL3DPROC glVertexAttribL3d(0);
	PFNGLVERTEXATTRIBL4DPROC glVertexAttribL4d(0);
	PFNGLVERTEXATTRIBL1DVPROC glVertexAttribL1dv(0);
	PFNGLVERTEXATTRIBL2DVPROC glVertexAttribL2dv(0);
	PFNGLVERTEXATTRIBL3DVPROC glVertexAttribL3dv(0);
	PFNGLVERTEXATTRIBL4DVPROC glVertexAttribL4dv(0);
	PFNGLVERTEXATTRIBLPOINTERPROC glVertexAttribLPointer(0);
	PFNGLGETVERTEXATTRIBLDVPROC glGetVertexAttribLdv(0);

	// GL_ARB_viewport_array
	PFNGLVIEWPORTARRAYVPROC glViewportArrayv(0);
	PFNGLVIEWPORTINDEXEDFPROC glViewportIndexedf(0);
	PFNGLVIEWPORTINDEXEDFVPROC glViewportIndexedfv(0);
	PFNGLSCISSORARRAYVPROC glScissorArrayv(0);
	PFNGLSCISSORINDEXEDPROC glScissorIndexed(0);
	PFNGLSCISSORINDEXEDVPROC glScissorIndexedv(0);
	PFNGLDEPTHRANGEARRAYVPROC glDepthRangeArrayv(0);
	PFNGLDEPTHRANGEINDEXEDPROC glDepthRangeIndexed(0);
	PFNGLGETFLOATI_VPROC glGetFloati_v(0);
	PFNGLGETDOUBLEI_VPROC glGetDoublei_v(0);

	// OpenGL 4.2
	// GL_ARB_texture_storage
	PFNGLTEXSTORAGE1DPROC glTexStorage1D(0);
	PFNGLTEXSTORAGE2DPROC glTexStorage2D(0);
	PFNGLTEXSTORAGE3DPROC glTexStorage3D(0);

	// GL_ARB_base_instance
	PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC glDrawArraysInstancedBaseInstance(0);
	PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC glDrawElementsInstancedBaseInstance(0);
	PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC glDrawElementsInstancedBaseVertexBaseInstance(0);

	// GL_ARB_shader_image_load_store
	PFNGLBINDIMAGETEXTUREPROC glBindImageTexture(0);
	PFNGLMEMORYBARRIERPROC glMemoryBarrier(0);

	// GL_ARB_internalformat_query
	PFNGLGETINTERNALFORMATIVPROC glGetInternalformativ(0);

	// GL_ARB_transform_feedback_instanced
	PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC glDrawTransformFeedbackInstanced(0);
	PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC glDrawTransformFeedbackStreamInstanced(0);

	PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC glVertexArrayBindVertexBufferEXT(0);
	PFNGLVERTEXARRAYBINDVERTEXATTRIBFORMATEXTPROC glVertexArrayVertexAttribFormatEXT(0);
	PFNGLVERTEXARRAYBINDVERTEXATTRIBIFORMATEXTPROC glVertexArrayVertexAttribIFormatEXT(0);
	PFNGLVERTEXARRAYBINDVERTEXATTRIBLFORMATEXTPROC glVertexArrayVertexAttribLFormatEXT(0);
	PFNGLVERTEXARRAYBINDVERTEXATTRIBBINDINGEXTPROC glVertexArrayVertexAttribBindingEXT(0);
	PFNGLVERTEXARRAYBINDVERTEXBINDINGDIVISOREXTPROC glVertexArrayVertexBindingDivisorEXT(0);

	// GL_ARB_clear_buffer_object
	PFNGLCLEARBUFFERDATAPROC glClearBufferData(0);
	PFNGLCLEARBUFFERSUBDATAPROC glClearBufferSubData(0);
	PFNGLCLEARNAMEDBUFFERDATAEXTPROC glClearNamedBufferDataEXT(0);
	PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC glClearNamedBufferSubDataEXT(0);

	// GL_ARB_compute_shader

	PFNGLDISPATCHCOMPUTEPROC glDispatchCompute(0);
	PFNGLDISPATCHCOMPUTEINDIRECTPROC glDispatchComputeIndirect(0);

	// GL_ARB_copy_image
	PFNGLCOPYIMAGESUBDATAPROC glCopyImageSubData(0);

	// GL_ARB_multi_draw_indirect
	PFNGLMULTIDRAWARRAYSINDIRECTPROC glMultiDrawArraysIndirect(0);
	PFNGLMULTIDRAWELEMENTSINDIRECTPROC glMultiDrawElementsIndirect(0);

	// GL_ARB_program_interface_query
	PFNGLGETPROGRAMINTERFACEIVPROC glGetProgramInterfaceiv(0);
	PFNGLGETPROGRAMRESOURCEINDEXPROC glGetProgramResourceIndex(0);
	PFNGLGETPROGRAMRESOURCENAMEPROC glGetProgramResourceName(0);
	PFNGLGETPROGRAMRESOURCEIVPROC glGetProgramResourceiv(0);
	PFNGLGETPROGRAMRESOURCELOCATIONPROC glGetProgramResourceLocation(0);
	PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC glGetProgramResourceLocationIndex(0);

	// GL_ARB_texture_buffer_range
	PFNGLTEXBUFFERRANGEPROC glTexBufferRange(0);
	PFNGLTEXTUREBUFFERRANGEEXTPROC glTextureBufferRangeEXT(0);

	// GL_ARB_texture_storage_multisample
	PFNGLTEXSTORAGE2DMULTISAMPLEPROC glTexStorage2DMultisample(0);
	PFNGLTEXSTORAGE3DMULTISAMPLEPROC glTexStorage3DMultisample(0);
	PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC glTextureStorage2DMultisampleEXT(0);
	PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC glTextureStorage3DMultisampleEXT(0);

	// GL_ARB_texture_view
	PFNGLTEXTUREVIEWPROC glTextureView(0);

	// GL_KHR_debug
	PFNGLDEBUGMESSAGECONTROLPROC glDebugMessageControl(0);
	PFNGLDEBUGMESSAGEINSERTPROC glDebugMessageInsert(0);
	PFNGLDEBUGMESSAGECALLBACKPROC glDebugMessageCallback(0);
	PFNGLGETDEBUGMESSAGELOGPROC glGetDebugMessageLog(0);
	PFNGLPUSHDEBUGGROUPPROC glPushDebugGroup(0);
	PFNGLPOPDEBUGGROUPPROC glPopDebugGroup(0);
	PFNGLOBJECTLABELPROC glObjectLabel(0);
	PFNGLGETOBJECTLABELPROC glGetObjectLabel(0);
	PFNGLOBJECTPTRLABELPROC glObjectPtrLabel(0);
	PFNGLGETOBJECTPTRLABELPROC glGetObjectPtrLabel(0);

	// GL_EXT_direct_state_access

	PFNGLTEXTURESTORAGE1DEXTPROC glTextureStorage1DEXT(0);
	PFNGLTEXTURESTORAGE2DEXTPROC glTextureStorage2DEXT(0);
	PFNGLTEXTURESTORAGE3DEXTPROC glTextureStorage3DEXT(0);

	PFNGLBINDMULTITEXTUREEXTPROC glBindMultiTextureEXT(0);
	PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC glCheckNamedFramebufferStatusEXT(0);
	PFNGLCLIENTATTRIBDEFAULTEXTPROC glClientAttribDefaultEXT(0);
	PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC glCompressedTextureImage1DEXT(0);
	PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC glCompressedTextureImage2DEXT(0);
	PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC glCompressedTextureImage3DEXT(0);
	PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC glCompressedTextureSubImage1DEXT(0);
	PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC glCompressedTextureSubImage2DEXT(0);
	PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC glCompressedTextureSubImage3DEXT(0);
	PFNGLCOPYTEXTUREIMAGE1DEXTPROC glCopyTextureImage1DEXT(0);
	PFNGLCOPYTEXTUREIMAGE2DEXTPROC glCopyTextureImage2DEXT(0);
	PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC glCopyTextureSubImage1DEXT(0);
	PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC glCopyTextureSubImage2DEXT(0);
	PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC glCopyTextureSubImage3DEXT(0);
	PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC glDisableVertexArrayAttribEXT(0);
	PFNGLDISABLEVERTEXARRAYEXTPROC glDisableVertexArrayEXT(0);
	PFNGLENABLEVERTEXARRAYATTRIBEXTPROC glEnableVertexArrayAttribEXT(0);
	PFNGLENABLEVERTEXARRAYEXTPROC glEnableVertexArrayEXT(0);
	PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC glFlushMappedNamedBufferRangeEXT(0);
	PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC glFramebufferDrawBufferEXT(0);
	PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC glFramebufferDrawBuffersEXT(0);
	PFNGLFRAMEBUFFERREADBUFFEREXTPROC glFramebufferReadBufferEXT(0);
	PFNGLGENERATETEXTUREMIPMAPEXTPROC glGenerateTextureMipmapEXT(0);
	PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC glGetCompressedTextureImageEXT(0);
	PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC glGetFramebufferParameterivEXT(0);
	PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC glGetNamedBufferParameterivEXT(0);
	PFNGLGETNAMEDBUFFERPOINTERVEXTPROC glGetNamedBufferPointervEXT(0);
	PFNGLGETNAMEDBUFFERSUBDATAEXTPROC glGetNamedBufferSubDataEXT(0);
	PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glGetNamedFramebufferAttachmentParameterivEXT(0);
	PFNGLGETNAMEDPROGRAMSTRINGEXTPROC glGetNamedProgramStringEXT(0);
	PFNGLGETNAMEDPROGRAMIVEXTPROC glGetNamedProgramivEXT(0);
	PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC glGetNamedRenderbufferParameterivEXT(0);
	PFNGLGETTEXTUREIMAGEEXTPROC glGetTextureImageEXT(0);
	PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC glGetTextureLevelParameterfvEXT(0);
	PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC glGetTextureLevelParameterivEXT(0);
	PFNGLGETTEXTUREPARAMETERIIVEXTPROC glGetTextureParameterIivEXT(0);
	PFNGLGETTEXTUREPARAMETERIUIVEXTPROC glGetTextureParameterIuivEXT(0);
	PFNGLGETTEXTUREPARAMETERFVEXTPROC glGetTextureParameterfvEXT(0);
	PFNGLGETTEXTUREPARAMETERIVEXTPROC glGetTextureParameterivEXT(0);
	PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC glGetVertexArrayIntegeri_vEXT(0);
	PFNGLGETVERTEXARRAYINTEGERVEXTPROC glGetVertexArrayIntegervEXT(0);
	PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC glGetVertexArrayPointeri_vEXT(0);
	PFNGLGETVERTEXARRAYPOINTERVEXTPROC glGetVertexArrayPointervEXT(0);
	PFNGLMAPNAMEDBUFFEREXTPROC glMapNamedBufferEXT(0);
	PFNGLMAPNAMEDBUFFERRANGEEXTPROC glMapNamedBufferRangeEXT(0);
	PFNGLNAMEDBUFFERDATAEXTPROC glNamedBufferDataEXT(0);
	PFNGLNAMEDBUFFERSUBDATAEXTPROC glNamedBufferSubDataEXT(0);
	PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC glNamedCopyBufferSubDataEXT(0);
	PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC glNamedFramebufferRenderbufferEXT(0);
	PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC glNamedFramebufferTexture1DEXT(0);
	PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC glNamedFramebufferTexture2DEXT(0);
	PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC glNamedFramebufferTexture3DEXT(0);
	PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC glNamedFramebufferTextureEXT(0);
	PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC glNamedFramebufferTextureFaceEXT(0);
	PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC glNamedFramebufferTextureLayerEXT(0);
	PFNGLNAMEDPROGRAMSTRINGEXTPROC glNamedProgramStringEXT(0);
	PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC glNamedRenderbufferStorageEXT(0);
	PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC glNamedRenderbufferStorageMultisampleCoverageEXT(0);
	PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC glNamedRenderbufferStorageMultisampleEXT(0);
	PFNGLTEXTUREBUFFEREXTPROC glTextureBufferEXT(0);
	PFNGLTEXTUREIMAGE1DEXTPROC glTextureImage1DEXT(0);
	PFNGLTEXTUREIMAGE2DEXTPROC glTextureImage2DEXT(0);
	PFNGLTEXTUREIMAGE3DEXTPROC glTextureImage3DEXT(0);
	PFNGLTEXTUREPARAMETERIIVEXTPROC glTextureParameterIivEXT(0);
	PFNGLTEXTUREPARAMETERIUIVEXTPROC glTextureParameterIuivEXT(0);
	PFNGLTEXTUREPARAMETERFEXTPROC glTextureParameterfEXT(0);
	PFNGLTEXTUREPARAMETERFVEXTPROC glTextureParameterfvEXT(0);
	PFNGLTEXTUREPARAMETERIEXTPROC glTextureParameteriEXT(0);
	PFNGLTEXTUREPARAMETERIVEXTPROC glTextureParameterivEXT(0);
	PFNGLTEXTURERENDERBUFFEREXTPROC glTextureRenderbufferEXT(0);
	PFNGLTEXTURESUBIMAGE1DEXTPROC glTextureSubImage1DEXT(0);
	PFNGLTEXTURESUBIMAGE2DEXTPROC glTextureSubImage2DEXT(0);
	PFNGLTEXTURESUBIMAGE3DEXTPROC glTextureSubImage3DEXT(0);
	PFNGLUNMAPNAMEDBUFFEREXTPROC glUnmapNamedBufferEXT(0);
	PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC glVertexArrayVertexAttribIOffsetEXT(0);
	PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC glVertexArrayVertexAttribOffsetEXT(0);
	PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC glVertexArrayVertexOffsetEXT(0);

	PFNGLSETMULTISAMPLEFVAMDPROC glSetMultisamplefvAMD(0);

	PFNGLGETBUFFERPARAMETERUI64VNVPROC glGetBufferParameterui64vNV(0);
	PFNGLGETINTEGERUI64VNVPROC glGetIntegerui64vNV(0);
	PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC glGetNamedBufferParameterui64vNV(0);
	PFNGLISBUFFERRESIDENTNVPROC glIsBufferResidentNV(0);
	PFNGLISNAMEDBUFFERRESIDENTNVPROC glIsNamedBufferResidentNV(0);
	PFNGLMAKEBUFFERNONRESIDENTNVPROC glMakeBufferNonResidentNV(0);
	PFNGLMAKEBUFFERRESIDENTNVPROC glMakeBufferResidentNV(0);
	PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC glMakeNamedBufferNonResidentNV(0);
	PFNGLMAKENAMEDBUFFERRESIDENTNVPROC glMakeNamedBufferResidentNV(0);
	PFNGLPROGRAMUNIFORMUI64NVPROC glProgramUniformui64NV(0);
	PFNGLPROGRAMUNIFORMUI64VNVPROC glProgramUniformui64vNV(0);
	PFNGLUNIFORMUI64NVPROC glUniformui64NV(0);
	PFNGLUNIFORMUI64VNVPROC glUniformui64vNV(0);

	PFNGLBUFFERADDRESSRANGENVPROC glBufferAddressRangeNV(0);
	PFNGLVERTEXATTRIBFORMATNVPROC glVertexAttribFormatNV(0);
	PFNGLVERTEXATTRIBIFORMATNVPROC glVertexAttribIFormatNV(0);
	PFNGLGETINTEGERUI64I_VNVPROC glGetIntegerui64i_vNV(0);

	PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC glTexImage2DMultisampleCoverageNV(0);
	PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC glTexImage3DMultisampleCoverageNV(0);
	PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC glTextureImage2DMultisampleCoverageNV(0);
	PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC glTextureImage2DMultisampleNV(0);
	PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC glTextureImage3DMultisampleCoverageNV(0);
	PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC glTextureImage3DMultisampleNV(0);

	PFNGLGETIMAGEHANDLENVPROC glGetImageHandleNV(0);
	PFNGLGETTEXTUREHANDLENVPROC glGetTextureHandleNV(0);
	PFNGLGETTEXTURESAMPLERHANDLENVPROC glGetTextureSamplerHandleNV(0);
	PFNGLISIMAGEHANDLERESIDENTNVPROC glIsImageHandleResidentNV(0);
	PFNGLISTEXTUREHANDLERESIDENTNVPROC glIsTextureHandleResidentNV(0);
	PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC glMakeImageHandleNonResidentNV(0);
	PFNGLMAKEIMAGEHANDLERESIDENTNVPROC glMakeImageHandleResidentNV(0);
	PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC glMakeTextureHandleNonResidentNV(0);
	PFNGLMAKETEXTUREHANDLERESIDENTNVPROC glMakeTextureHandleResidentNV(0);
	PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC glProgramUniformHandleui64NV(0);
	PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC glProgramUniformHandleui64vNV(0);
	PFNGLUNIFORMHANDLEUI64NVPROC glUniformHandleui64NV(0);
	PFNGLUNIFORMHANDLEUI64VNVPROC glUniformHandleui64vNV(0);

	PFNGLGETMULTISAMPLEFVNVPROC glGetMultisamplefvNV(0);
	PFNGLSAMPLEMASKINDEXEDNVPROC glSampleMaskIndexedNV(0);
	PFNGLTEXRENDERBUFFERNVPROC glTexRenderbufferNV(0);
	
	PFNGLTEXSTORAGESPARSEAMDPROC glTexStorageSparseAMD = 0;
	PFNGLTEXTURESTORAGESPARSEAMDPROC glTextureStorageSparseAMD = 0;

	// GL_ARB_debug_output
	PFNGLDEBUGMESSAGECONTROLARBPROC glDebugMessageControlARB(0);
	PFNGLDEBUGMESSAGEINSERTARBPROC glDebugMessageInsertARB(0);
	PFNGLDEBUGMESSAGECALLBACKARBPROC glDebugMessageCallbackARB(0);
	PFNGLGETDEBUGMESSAGELOGARBPROC glGetDebugMessageLogARB(0);

	// WGL_EXT_swap_control
#ifdef WIN32
	PFNWGLSWAPINTERVALEXTPROC wglSwapIntervalEXT(0);
	PFNWGLGETSWAPINTERVALEXTPROC wglGetSwapIntervalEXT(0);
#endif

#endif//WIN32
